package io.servicios;

/**
 *
 * @author Mariano Zapata
 */
public class Actualizador extends Thread {
    
    private ActualizadorListener listener;
    private Cola<Actualizacion> cola;
    private boolean vida;
    
    public static final int ACTUALIZAR_CARPETA= 0;
    public static final int QUITAR_DE_CARPETA= 1;
    public static final int CORTAR_OBJETO= 2;
    public static final int ACTUALIZAR_LISTA_AGENDA= 3;
    public static final int QUITAR_DE_LISTA_AGENDA= 4;
    public static final int SET_PROXIMOS_EVENTOS= 5;
    public static final int TIEMPO_CUMPLIDO= 6;
    
    public Actualizador()
    {
        listener= null;
        vida= true;
        cola= new Cola<Actualizacion>();
    }
    
    @Override
    public void run()
    {
        while (vida)
        {
            try {
                this.notificarActualizacion(cola.desencolar());
            } catch (InterruptedException ex) {/*NADA*/}
        }
    }
    
    public void detener()
    {
        vida= false;
        this.interrupt();
    }
    
    private void notificarActualizacion(Actualizacion a)
    {
        if (listener != null)
        {
            switch (a.getTipo())
            {
                case ACTUALIZAR_CARPETA: listener.actualizarCarpeta(a.getCarpeta1(), a.getOperacion()); break;
                case QUITAR_DE_CARPETA: listener.quitarDeCarpeta(a.getCarpeta1(), a.getObjeto()); break;
                case CORTAR_OBJETO: listener.cortarObjeto(a.getObjeto(), a.getCarpeta1(), a.getCarpeta2()); break;
                case ACTUALIZAR_LISTA_AGENDA: listener.actualizarListaAgenda(a.getItems()); break;
                case QUITAR_DE_LISTA_AGENDA: listener.quitarDeListaAgenda(a.getItem()); break;
                case SET_PROXIMOS_EVENTOS: listener.setProximosEventos(a.getItems()); break;
                case TIEMPO_CUMPLIDO: listener.tiempoCumplido(); break;
            }
        }
    }
    
    public void encolarActualizacion(Actualizacion a) {
        cola.encolar(a);
    }
    
    public void agregarActualizadorListener(ActualizadorListener al) {
        listener= al;
    }
    
    public void quitarActualizadorListener() {
        listener= null;
    }
}
